#ifndef _DISPLAY_SCREEN_H_
#define _DISPLAY_SCREEN_H_

#include "head.h"

// 颜色转换宏：BMP的BGR格式 → ARGB8888（A=0：不透明）
#define BGR2ARGB(a, r, g, b) ((a) << 24 | (r) << 16 | (g) << 8 | (b))
// 最大支持的BMP文件数量
#define MAX_FILES 100
// BMP文件头结构体
struct bitmap_header
{
    int16_t type;
    int32_t size; // 图像文件大小
    int16_t reserved1;
    int16_t reserved2;
    int32_t offbits; // BMP图像数据偏移量
} __attribute__((packed));

// BMP信息头结构体
struct bitmap_info
{
    int32_t size;   // 本结构大小
    int32_t width;  // 图像宽
    int32_t height; // 图像高
    int16_t planes;
    int16_t bit_count; // 色深（仅支持24bpp）
    int32_t compression;
    int32_t size_img; // BMP文件中的RGB数据大小（4的整数倍）
    int32_t X_pel;
    int32_t Y_pel;
    int32_t clrused;
    int32_t clrImportant;
} __attribute__((packed));

// LCD设备结构体（双缓冲）
struct LCD
{
    int fd;                    // 文件描述符
    int width;                 // LCD像素宽
    int height;                // LCD像素高
    int pixle_byte;            // 每个像素字节数（色深/8）
    int line_size;             // 1行字节数（width * pixle_byte）
    unsigned long screen_size; // 单屏总字节数
    char *fb_mem;              // 双缓冲总起始地址（char*：兼容所有色深）
};

// extern
extern struct fb_var_screeninfo varinfo;
//

int lcd_uninit(struct LCD *lcd);
int get_bmp_location(const char *appoint_dir, const char *appoint_type, char (*allfile_way)[256]);
void draw_pixle(struct LCD *lcd, char *fb_base, int x, int y, int color);
void show_bmp(struct LCD *lcd, char *bmpname, int xoffset, int yoffset, char *fb_base);
int lcd_init(struct LCD *lcd);
int lcd_uninit(struct LCD *lcd);
void display_a_photo(struct LCD *lcd, char *bmp_path);
void display_a_photo2(struct LCD *lcd, char *bmp_path, int xoffset, int yoffset);
int get_bmp_pixel_color(char *bmpname, int target_x, int target_y);
#endif